package strategy;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;

/**
 * 策略模式
 *
 * @author cctv
 */
public class MyObjTest {
    public static void main(String[] args) {
        //举例：Java中comparator是strategy的完美诠释，将排序算法提取到Collections类中，将比较规则提取到Comparator中，实现数据与排序算法的完全解耦。
//        List<Long> numbers = new ArrayList<Long>();
//        Collections.sort(numbers, new Comparator<Long>() {
//
//            /**
//             * 返回值是固定的 0 -1 1
//             * @param o1
//             * @param o2
//             * @return
//             */
//            @Override
//            public int compare(Long o1, Long o2) {
//                // 中间的逻辑是不一样的
//                System.out.println("来了老弟");
//                return 0;
//            }
//        });

        List<MyObj> myObjList = new ArrayList<MyObj>();
        myObjList.add(new MyObj(1, 'a'));
        myObjList.add(new MyObj(4, 'e'));
        myObjList.add(new MyObj(2, 'c'));
        myObjList.add(new MyObj(5, 'b'));
        myObjList.add(new MyObj(3, 'f'));
        for (MyObj m : myObjList){
            System.out.println(m.getChar()+" "+m.getNumber());
        }
        Collections.sort(myObjList, new CharComparator());
        System.out.println("sort by char :");
        for (MyObj m : myObjList){
            System.out.println(m.getChar()+" "+m.getNumber());
        }
        Collections.sort(myObjList, new NumberComparator());
        System.out.println("sort by number :");
        for (MyObj m : myObjList){
            System.out.println(m.getChar()+" "+m.getNumber());
        }

    }
}
